﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Presentacion.Contrato.Login;
using System.Web.UI.WebControls;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos.ComandoLogin;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Clases;



namespace Sistema_Totem.Presentacion.Presentador.Login
{
    public class PresentadorCambiarContrasena
    {
        #region Atributos

        private IContratoCambiarContrasena _vista;
        private Comando<bool> _comando;
        private string _mensajeErrorVacio = "Faltan campos por rellenar";
        private string _mensajeErrorContrasena = "Las contraseñas nuevas no coinciden";
        private string _mensajeError = "Se produjo un error al modificar la contrasena";
        private string _mensajeErrorTamano = "La contraseña nueva debe ser mayor a 7 digitos";
        private string _mensajeErrorActual = "La contraseña actual no es correcta";

        private Usuario _usuario;
        
        #endregion Atributos

        #region Constructor

        public PresentadorCambiarContrasena(IContratoCambiarContrasena _vista)
        {
            this._vista = _vista;
        }

        #endregion Constructor

        #region Metodos

        /// <summary>
        /// El metodo valida que no haya campos vacios
        /// </summary>
        private bool ValidarDatosVacios()
        {
            if ((_vista.ContrasenaTexto.Text == "") || (_vista.NuevaContrasenaTexto.Text == "")
               || (_vista.ConfirmarContrasenaTexto.Text == ""))
            {
                _vista.MensajeError.Visible = true;
                _vista.MensajeError.Text =_mensajeErrorVacio ;
                return false;
            }
            else
                return true;
        }

        /// <summary>
        /// El metodo valida que la contrasena nueva sea igual a confirmar contrasena nueva
        /// </summary>
        private bool ValidarContrasenasIguales()
        {
            if (!(_vista.NuevaContrasenaTexto.Text.Equals(_vista.ConfirmarContrasenaTexto.Text)))
            {
                _vista.MensajeError.Text = _mensajeErrorContrasena;
                _vista.MensajeError.Visible = true;
                return false;
            }
            else
                return true;
        }

        /// <summary>
        /// El metodo cambia el password del usuario 
        /// </summary>
        private bool ModificarPassword()
        {
            //_usuario = _vista.Sesion["usuario"] as Usuario;
            _comando = FabricaComando.CrearComandoModificarPassword
                             (_usuario.Username, _vista.NuevaContrasenaTexto.Text);
            return _comando.Ejecutar();
        }

        /// <summary>
        /// El metodo comprueba que le password introducido es igual al del usuario 
        /// </summary>
        private bool ValidarPassword()
        {
            _usuario = _vista.Sesion["usuario"] as Usuario;

            if (_usuario.Password.Equals(_vista.ContrasenaTexto.Text))
                return true;
            else
                return false;
         }

        /// <summary>
        /// El metodo valida que el password tenga mas de 7 caracteres
        /// </summary>
        private bool ValidarTamanoPassword()
        {
            if ((_vista.NuevaContrasenaTexto.Text.Length) >= 8)
                return true;
            else
                return false;
        }

        /// <summary>
        /// El metodo se encarga de realizar todas las validaciones y luego modifica la contrasena 
        /// </summary>
        public void ModificarPasswordUsuario()
        {
            _vista.ContrasenaModificada.Visible = false;
            _vista.MensajeError.Visible = false;

            if (ValidarDatosVacios())    
        
                if (ValidarContrasenasIguales())
                
                    if (ValidarPassword())
                    {
                        if (ValidarTamanoPassword())
                        {
                            if (ModificarPassword())
                                _vista.ContrasenaModificada.Visible = true;
                            else
                            {
                                _vista.MensajeError.Text = _mensajeError;
                                _vista.MensajeError.Visible = true;
                            }
                        }
                        else
                        {
                            _vista.MensajeError.Text = _mensajeErrorTamano;
                            _vista.MensajeError.Visible = true;
                        }
                    }
                    else
                    {
                        _vista.MensajeError.Text = _mensajeErrorActual;
                        _vista.MensajeError.Visible = true;
                    }
        }

        #endregion Metodos
    }
}